package sysmodels

import (
	"errors"
	"github.com/astaxie/beego/orm"
)

type SysAuth struct {
	Id       int    `orm:"column(id)" json:"id"`
	Pid      int    `orm:"default(-1)" json:"pid"`
	AuthName string `orm:"size(20);unique" json:"authname"` //权限标识
	Name     string `orm:"size(20)" json:"name"`            //中文名
	Describe string `orm:"size(50);" json:"describe"`       //描述
	Order    int    `json:"order"`                          //排序
	Status   bool   `orm:"default(true)" json:"status"`     //是否有效
	Api      string `orm:"size(30)" json:"api"`             // api eg:get:/users
}

func NewSysAuth() *SysAuth {
	return &SysAuth{Status: true}
}


//查询权限
//查询2 query
func (this *SysAuth) Query(limit, page int) ([]*SysAuth, int64) {
	qs := orm.NewOrm().QueryTable(AUTHTABLE)
	var auths []*SysAuth
	if this.AuthName != "" {
		qs = qs.Filter("AuthName__icontains", this.AuthName)
	}
	qs.Limit(limit, (page-1)*limit).OrderBy("id").All(&auths)
	cnt, _ := qs.Limit(limit, (page-1)*limit).Count()
	return auths, cnt
}



//添加
func (this *SysAuth) Add() error {
	o := orm.NewOrm()
	if this.AuthName == "" {
		return errors.New("权限标识不能为空")
	}
	if o.QueryTable(AUTHTABLE).Filter("AuthName", this.AuthName).Exist() {
		return errors.New("该权限已注册!")
	}
	if this.Api != "" && o.QueryTable(AUTHTABLE).Filter("Api", this.Api).Exist() {
		return errors.New("该API已注册!")
	}
	_, err := o.Insert(this)
	if err != nil {
		return errors.New("创建失败!")
	}
	return nil
}

//根据id列表获取多个
func (this *SysAuth) GetByListId(id_list []interface{}) (*[]*SysAuth, error) {
	var auths []*SysAuth
	o := orm.NewOrm()
	_, err := o.QueryTable(AUTHTABLE).Filter("id__in", id_list...).All(&auths)
	if err != nil {
		return nil, err
	}
	return &auths, nil
}




//获取所有
func (this *SysAuth) GetAuthAll() (*[]*SysAuth, error) {
	auths := &[]*SysAuth{}
	o := orm.NewOrm()
	_, err := o.QueryTable(AUTHTABLE).All(auths)
	if err != nil {
		return nil, err
	}
	return auths, nil
}

//更新
func (this *SysAuth) Update() error {
	o := orm.NewOrm()
	_, err := o.Update(this)
	return err
}
func (this *SysAuth) GetById() error {
	o := orm.NewOrm()
	err := o.Read(this)
	if !this.Status{
		this = nil
		return orm.ErrNoRows
	}
	return err
}
